<?php
/**
 * 生成科室、医生和医生排班数据
 * 这个脚本用于为医院信息系统生成真实的科室介绍、医生信息和排班数据
 */

// 设置执行时间，防止超时
set_time_limit(600);

// 数据库连接配置
require_once('includes/config.php');
$conn = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);

// 检查连接
if (!$conn) {
    die("连接失败: " . mysqli_connect_error());
}

// 设置字符集
mysqli_query($conn, "SET NAMES utf8mb4");
mysqli_query($conn, "SET CHARACTER SET utf8mb4");

echo "开始生成科室、医生和排班数据...\n";

// 科室数据
$departments = [
    [
        'id' => 1,
        'name' => '内科',
        'description' => '内科是临床医学的一个专业领域，主要研究成人内脏疾病的病因、发病机制、诊断、治疗和预防。我院内科拥有先进的医疗设备和专业的医疗团队，为患者提供全面、系统的诊疗服务。',
        'location' => '门诊楼2层',
        'phone' => '0755-88661001',
        'specialties' => '心血管疾病、消化系统疾病、呼吸系统疾病、内分泌疾病、肾脏疾病',
        'subspecialties' => [
            '心血管内科', '消化内科', '呼吸内科', '内分泌科', '肾内科', '血液科', '风湿免疫科'
        ]
    ],
    [
        'id' => 2,
        'name' => '外科',
        'description' => '外科是医学的一个专科，主要研究外科疾病的诊断和外科手术治疗。我院外科拥有先进的手术设备和技术，专业团队经验丰富，能够处理各类复杂手术。',
        'location' => '门诊楼3层',
        'phone' => '0755-88661002',
        'specialties' => '普通外科、骨科、神经外科、胸外科、泌尿外科、整形外科',
        'subspecialties' => [
            '普通外科', '骨科', '神经外科', '心胸外科', '泌尿外科', '整形外科', '烧伤科', '肝胆外科'
        ]
    ],
    [
        'id' => 3,
        'name' => '妇产科',
        'description' => '妇产科是研究女性生殖系统疾病和生理的医学专科。我院妇产科配备先进的医疗设备，提供优质的产检、分娩和妇科疾病诊疗服务。',
        'location' => '门诊楼4层',
        'phone' => '0755-88661003',
        'specialties' => '产科、妇科、计划生育、妇科肿瘤、不孕不育',
        'subspecialties' => [
            '产科', '妇科', '计划生育科', '妇科肿瘤', '生殖医学科', '妇科内分泌'
        ]
    ],
    [
        'id' => 4,
        'name' => '儿科',
        'description' => '儿科是专门研究儿童生长发育和疾病防治的医学专科。我院儿科医生经验丰富，为儿童提供全面的医疗保健服务，包括疫苗接种、疾病诊治和健康咨询。',
        'location' => '门诊楼2层',
        'phone' => '0755-88661004',
        'specialties' => '儿童内科、儿童外科、新生儿科、儿童保健、儿童心理',
        'subspecialties' => [
            '儿童内科', '儿童外科', '新生儿科', '儿童保健科', '儿童神经科', '儿童心理科', '儿童呼吸科'
        ]
    ],
    [
        'id' => 5,
        'name' => '眼科',
        'description' => '眼科是研究眼睛及其附属器官的疾病的医学专科。我院眼科拥有先进的检查设备和手术器械，能够诊治各种眼部疾病，提供屈光矫正手术和白内障手术等服务。',
        'location' => '门诊楼5层',
        'phone' => '0755-88661005',
        'specialties' => '白内障、青光眼、视网膜疾病、眼表疾病、屈光不正',
        'subspecialties' => [
            '白内障科', '青光眼科', '眼底病科', '眼表疾病科', '视光学科', '眼外伤科'
        ]
    ],
    [
        'id' => 6,
        'name' => '耳鼻喉科',
        'description' => '耳鼻喉科是研究耳、鼻、咽喉及相关区域疾病的医学专科。我院耳鼻喉科医生经验丰富，能够诊治各类耳鼻喉疾病，提供听力检查和鼻窦内窥镜手术等服务。',
        'location' => '门诊楼5层',
        'phone' => '0755-88661006',
        'specialties' => '中耳炎、鼻窦炎、咽喉炎、听力障碍、声带疾病',
        'subspecialties' => [
            '耳科', '鼻科', '咽喉科', '头颈外科', '听力科'
        ]
    ],
    [
        'id' => 7,
        'name' => '口腔科',
        'description' => '口腔科是研究口腔及颌面部疾病的医学专科。我院口腔科设备先进，提供口腔检查、洁牙、补牙、拔牙、牙齿矫正和种植牙等服务。',
        'location' => '门诊楼6层',
        'phone' => '0755-88661007',
        'specialties' => '口腔内科、口腔修复、口腔正畸、口腔外科、口腔预防保健',
        'subspecialties' => [
            '口腔内科', '口腔修复科', '口腔正畸科', '口腔外科', '口腔种植科', '口腔黏膜科'
        ]
    ],
    [
        'id' => 8,
        'name' => '皮肤科',
        'description' => '皮肤科是研究皮肤及其附属器官疾病的医学专科。我院皮肤科医生经验丰富，能够诊治各类皮肤疾病，提供皮肤美容和激光治疗等服务。',
        'location' => '门诊楼6层',
        'phone' => '0755-88661008',
        'specialties' => '过敏性皮肤病、感染性皮肤病、色素性皮肤病、皮肤肿瘤、银屑病',
        'subspecialties' => [
            '过敏性皮肤病科', '感染性皮肤病科', '色素性皮肤病科', '皮肤肿瘤科', '皮肤美容科'
        ]
    ],
    [
        'id' => 9,
        'name' => '精神心理科',
        'description' => '精神心理科是研究人类精神活动和心理问题的医学专科。我院精神心理科医生专业素养高，能够为患者提供心理咨询、心理治疗和精神疾病诊治服务。',
        'location' => '门诊楼7层',
        'phone' => '0755-88661009',
        'specialties' => '抑郁症、焦虑症、睡眠障碍、精神分裂症、心理咨询',
        'subspecialties' => [
            '精神科', '心理咨询科', '睡眠医学科', '成瘾医学科', '老年精神科'
        ]
    ],
    [
        'id' => 10,
        'name' => '中医科',
        'description' => '中医科是以中医理论为指导，研究和运用中医药防治疾病的医学专科。我院中医科医生经验丰富，能够运用中医药、针灸和推拿等方法治疗各类疾病。',
        'location' => '门诊楼8层',
        'phone' => '0755-88661010',
        'specialties' => '中医内科、中医外科、针灸推拿、中医妇科、中医儿科',
        'subspecialties' => [
            '中医内科', '中医外科', '针灸科', '推拿科', '中医妇科', '中医儿科', '中医骨伤科'
        ]
    ],
    [
        'id' => 11,
        'name' => '急诊科',
        'description' => '急诊科是为急危重症患者提供紧急救治的医学专科。我院急诊科24小时开放，配备先进的急救设备和经验丰富的医护人员，能够及时处理各类急症。',
        'location' => '门诊楼1层',
        'phone' => '0755-88661011',
        'specialties' => '创伤急救、心脑血管急症、急性中毒、急性腹症、多发伤救治',
        'subspecialties' => [
            '急诊内科', '急诊外科', '急诊重症监护', '急诊创伤', '中毒救治'
        ]
    ],
    [
        'id' => 12,
        'name' => '康复科',
        'description' => '康复科是研究和运用康复医学知识和技术为患者提供康复治疗的医学专科。我院康复科配备先进的康复设备，为患者提供物理治疗、作业治疗和言语治疗等服务。',
        'location' => '门诊楼9层',
        'phone' => '0755-88661012',
        'specialties' => '神经康复、骨科康复、儿童康复、老年康复、心肺康复',
        'subspecialties' => [
            '神经康复科', '骨科康复科', '儿童康复科', '老年康复科', '心肺康复科', '言语康复科'
        ]
    ]
];

// 医生职位
$positions = ['主任医师', '副主任医师', '主治医师', '住院医师'];

// 教育背景模板
$education_templates = [
    '毕业于%s医学院，医学博士学位，曾在%s进修。',
    '%s医学院医学专业本硕连读，后获%s医学博士学位。',
    '%s医科大学临床医学专业毕业，获得博士学位，曾在%s访学。',
    '毕业于%s医学院，随后在%s完成专科培训。',
    '%s大学医学院毕业，获医学博士学位，在%s完成博士后研究。'
];

// 医学院校
$medical_schools = ['北京', '上海', '广州', '武汉', '南京', '哈尔滨', '重庆', '西安', '长沙', '成都'];

// 知名医院
$hospitals = ['协和医院', '华西医院', '北京大学第一医院', '中山医院', '瑞金医院', '同济医院', '湘雅医院', '齐鲁医院', '华山医院', '南方医科大学附属医院'];

// 经验模板
$experience_templates = [
    '拥有超过%d年临床经验，专注于%s领域的诊断和治疗。',
    '从事%s工作%d年，积累了丰富的临床经验。',
    '具有%d年%s专业临床经验，擅长疑难病例的诊断。',
    '在%s领域有%d年研究和临床经验，发表多篇学术论文。',
    '具备%d年%s临床工作经验，参与多项国家级科研项目。'
];

// 个人简介模板
$bio_templates = [
    '作为经验丰富的医生，致力于为患者提供高质量的医疗服务，特别擅长%s。曾获得多项专业奖项，发表多篇学术论文。关注医学前沿发展，不断更新知识和技能。',
    '专注于%s的临床研究和治疗，具有扎实的医学理论基础和丰富的实践经验。待患者亲切耐心，深受患者信赖。积极参与学术交流，提升专业水平。',
    '在%s领域造诣深厚，善于结合传统与现代医学方法，为患者提供个性化治疗方案。注重医患沟通，耐心解答患者疑问。曾参与多项国际医学合作项目。',
    '专业从事%s诊疗工作，拥有深厚的理论基础和丰富的临床经验。治学严谨，对待患者认真负责。曾多次参加国内外学术会议，与同行交流经验。',
    '作为%s方向的专家，具有较高的学术造诣和丰富的临床经验。关注医学进展，不断学习新知识、新技术。以患者为中心，提供优质医疗服务。'
];

// 中文姓氏
$surnames = [
    '李', '王', '张', '刘', '陈', '杨', '黄', '赵', '周', '吴', 
    '徐', '孙', '马', '朱', '胡', '林', '郭', '何', '高', '罗', 
    '郑', '梁', '谢', '宋', '唐', '许', '邓', '冯', '韩', '曹',
    '曾', '彭', '萧', '蔡', '潘', '田', '董', '袁', '于', '余',
    '叶', '蒋', '杜', '苏', '魏', '程', '吕', '丁', '沈', '任',
    '姚', '卢', '傅', '钟', '姜', '崔', '谭', '廖', '范', '汪'
];

// 男性名字
$male_names = [
    '伟', '强', '磊', '军', '洋', '勇', '华', '超', '文', '波', 
    '刚', '健', '明', '亮', '俊', '杰', '涛', '龙', '斌', '浩',
    '鑫', '凯', '峰', '彬', '宇', '轩', '鹏', '宁', '建', '辉',
    '良', '学', '东', '博', '飞', '鸿', '志', '宏', '雷', '震',
    '楠', '睿', '锋', '泽', '睿', '铭', '铭', '铭', '嘉', '伦'
];

// 女性名字
$female_names = [
    '娜', '敏', '静', '婷', '文', '秀', '洁', '英', '丽', '芳', 
    '萍', '华', '红', '玲', '燕', '晶', '娟', '颖', '佳', '倩',
    '琳', '雪', '琴', '璐', '莉', '兰', '荣', '梅', '瑶', '欣',
    '茹', '雅', '楠', '清', '怡', '婧', '悦', '凤', '淑', '雯',
    '霞', '露', '莹', '岚', '月', '蓉', '彤', '凌', '迪', '琪'
];

// 清空users表中角色为doctor的用户
$clear_doctors_sql = "DELETE u FROM users u JOIN doctors d ON u.id = d.user_id";
mysqli_query($conn, $clear_doctors_sql);

// 清空doctors表
$clear_doctors_sql = "DELETE FROM doctors";
mysqli_query($conn, $clear_doctors_sql);

// 清空doctor_schedules表
$clear_schedules_sql = "DELETE FROM doctor_schedules";
mysqli_query($conn, $clear_schedules_sql);

// 更新科室数据
foreach ($departments as $dept) {
    // 检查科室是否存在
    $check_sql = "SELECT * FROM departments WHERE id = {$dept['id']}";
    $result = mysqli_query($conn, $check_sql);
    
    if (mysqli_num_rows($result) > 0) {
        // 更新现有科室
        $sql = "UPDATE departments SET 
                description = '" . mysqli_real_escape_string($conn, $dept['description']) . "',
                location = '" . mysqli_real_escape_string($conn, $dept['location']) . "',
                phone = '" . mysqli_real_escape_string($conn, $dept['phone']) . "',
                specialties = '" . mysqli_real_escape_string($conn, $dept['specialties']) . "'
                WHERE id = {$dept['id']}";
    } else {
        // 插入新科室
        $sql = "INSERT INTO departments (id, name, description, location, phone, specialties) 
                VALUES ({$dept['id']}, '" . mysqli_real_escape_string($conn, $dept['name']) . "', 
                '" . mysqli_real_escape_string($conn, $dept['description']) . "', 
                '" . mysqli_real_escape_string($conn, $dept['location']) . "', 
                '" . mysqli_real_escape_string($conn, $dept['phone']) . "', 
                '" . mysqli_real_escape_string($conn, $dept['specialties']) . "')";
    }
    
    if (mysqli_query($conn, $sql)) {
        echo "科室 {$dept['name']} 数据更新成功\n";
    } else {
        echo "错误: " . $sql . "\n" . mysqli_error($conn) . "\n";
    }
    
    // 为每个科室生成医生
    echo "为科室 {$dept['name']} 生成医生数据...\n";
    
    // 每个科室生成8-12名医生
    $doctor_count = rand(8, 12);
    
    // 确保每个职位都有医生
    $doctors_generated = 0;
    
    foreach ($positions as $position) {
        // 每个职位至少生成2名医生
        $position_doctors = ($position == '主任医师' || $position == '副主任医师') ? rand(1, 2) : rand(2, 4);
        
        for ($i = 0; $i < $position_doctors; $i++) {
            // 随机生成医生基本信息
            $gender = rand(0, 1) ? '男' : '女';
            $surname = $surnames[array_rand($surnames)];
            
            if ($gender == '男') {
                $name = $surname . $male_names[array_rand($male_names)];
                if (rand(0, 1)) {
                    $name .= $male_names[array_rand($male_names)];
                }
            } else {
                $name = $surname . $female_names[array_rand($female_names)];
                if (rand(0, 1)) {
                    $name .= $female_names[array_rand($female_names)];
                }
            }
            
            // 生成用户名和密码
            $username = strtolower(substr(md5($name . time() . rand(1000, 9999)), 0, 8));
            $password = md5('123456'); // 默认密码为123456
            
            // 生成邮箱
            $email = $username . '@example.com';
            
            // 生成电话
            $phone = '1' . rand(3, 9) . rand(0, 9) . rand(1000000, 9999999);
            
            // 创建用户
            $user_sql = "INSERT INTO users (username, password, email, role, created_at) 
                        VALUES ('" . mysqli_real_escape_string($conn, $username) . "', 
                        '" . $password . "', 
                        '" . mysqli_real_escape_string($conn, $email) . "', 
                        'doctor', NOW())";
            
            if (mysqli_query($conn, $user_sql)) {
                $user_id = mysqli_insert_id($conn);
                
                // 生成医生教育和经验
                $education = sprintf(
                    $education_templates[array_rand($education_templates)],
                    $medical_schools[array_rand($medical_schools)] . '医科大学',
                    $hospitals[array_rand($hospitals)]
                );
                
                // 随机分配科室专业方向
                $subspecialty = $dept['subspecialties'][array_rand($dept['subspecialties'])];
                
                // 随机生成年资，根据职位调整
                $years = 0;
                switch ($position) {
                    case '主任医师':
                        $years = rand(20, 35);
                        break;
                    case '副主任医师':
                        $years = rand(15, 25);
                        break;
                    case '主治医师':
                        $years = rand(8, 18);
                        break;
                    case '住院医师':
                        $years = rand(3, 10);
                        break;
                }
                
                $experience = sprintf(
                    $experience_templates[array_rand($experience_templates)],
                    $years,
                    $subspecialty
                );
                
                // 随机生成个人简介
                $bio = sprintf(
                    $bio_templates[array_rand($bio_templates)],
                    $subspecialty
                );
                
                // 创建医生
                $doctor_sql = "INSERT INTO doctors (user_id, name, position, department_id, phone, bio, education, experience, title) 
                              VALUES ($user_id, 
                              '" . mysqli_real_escape_string($conn, $name) . "', 
                              '" . mysqli_real_escape_string($conn, $position) . "', 
                              {$dept['id']}, 
                              '" . mysqli_real_escape_string($conn, $phone) . "', 
                              '" . mysqli_real_escape_string($conn, $bio) . "', 
                              '" . mysqli_real_escape_string($conn, $education) . "', 
                              '" . mysqli_real_escape_string($conn, $experience) . "',
                              '" . mysqli_real_escape_string($conn, $position) . "')";
                
                if (mysqli_query($conn, $doctor_sql)) {
                    $doctor_id = mysqli_insert_id($conn);
                    echo "医生 {$name}（{$position}）创建成功\n";
                    
                    // 生成排班
                    generate_schedule($conn, $doctor_id, $name);
                    
                    $doctors_generated++;
                } else {
                    echo "创建医生失败: " . $doctor_sql . "\n" . mysqli_error($conn) . "\n";
                }
            } else {
                echo "创建用户失败: " . $user_sql . "\n" . mysqli_error($conn) . "\n";
            }
            
            // 达到目标数量后停止
            if ($doctors_generated >= $doctor_count) {
                break 2;
            }
        }
    }
    
    echo "科室 {$dept['name']} 共生成 {$doctors_generated} 名医生\n";
}

// 排班生成函数
function generate_schedule($conn, $doctor_id, $doctor_name) {
    // 将星期几映射为数字
    $weekday_map = [
        'Monday' => 1,
        'Tuesday' => 2,
        'Wednesday' => 3,
        'Thursday' => 4,
        'Friday' => 5,
        'Saturday' => 6,
        'Sunday' => 7
    ];
    
    // 随机生成每周工作日
    $weekdays = array_keys($weekday_map); // 获取星期名称数组
    $workdays_count = rand(4, 6); // 每周工作4-6天
    shuffle($weekdays);
    $workdays = array_slice($weekdays, 0, $workdays_count);
    
    foreach ($weekdays as $weekday) {
        // 判断是否是工作日
        $is_working = in_array($weekday, $workdays) ? 1 : 0;
        
        // 获取星期几的数字表示
        $weekday_num = $weekday_map[$weekday];
        
        // 如果是工作日，设置工作时间
        if ($is_working) {
            // 随机决定是上午班、下午班还是全天班
            $shift = rand(1, 3);
            
            if ($shift == 1) { // 上午班
                $insert_sql = "INSERT INTO doctor_schedules (doctor_id, weekday, start_time, end_time, is_working) 
                            VALUES ($doctor_id, $weekday_num, '08:30:00', '12:00:00', 1)";
            } else if ($shift == 2) { // 下午班
                $insert_sql = "INSERT INTO doctor_schedules (doctor_id, weekday, start_time, end_time, is_working) 
                            VALUES ($doctor_id, $weekday_num, '14:00:00', '17:30:00', 1)";
            } else { // 全天班 - 分两条记录插入
                $morning_sql = "INSERT INTO doctor_schedules (doctor_id, weekday, start_time, end_time, is_working) 
                             VALUES ($doctor_id, $weekday_num, '08:30:00', '12:00:00', 1)";
                if (mysqli_query($conn, $morning_sql)) {
                    echo "医生 {$doctor_name} 在星期{$weekday_num}上午的排班信息添加成功\n";
                } else {
                    echo "错误: " . $morning_sql . "\n" . mysqli_error($conn) . "\n";
                }
                
                // 下午班插入
                $insert_sql = "INSERT INTO doctor_schedules (doctor_id, weekday, start_time, end_time, is_working) 
                            VALUES ($doctor_id, $weekday_num, '14:00:00', '17:30:00', 1)";
            }
        } else {
            // 非工作日
            $insert_sql = "INSERT INTO doctor_schedules (doctor_id, weekday, start_time, end_time, is_working) 
                        VALUES ($doctor_id, $weekday_num, NULL, NULL, 0)";
        }
        
        if (mysqli_query($conn, $insert_sql)) {
            $shift_text = $is_working ? (isset($shift) ? ($shift == 1 ? "上午" : "下午") : "") : "休息";
            echo "医生 {$doctor_name} 在星期{$weekday_num}{$shift_text}的排班信息添加成功\n";
        } else {
            echo "错误: " . $insert_sql . "\n" . mysqli_error($conn) . "\n";
        }
    }
}

// 手动添加放射科（如果不存在）
$radiology_check = "SELECT * FROM departments WHERE name = '放射科'";
$radiology_result = mysqli_query($conn, $radiology_check);
if (mysqli_num_rows($radiology_result) == 0) {
    $radiology_sql = "INSERT INTO departments (name, description, location, phone, specialties) 
                     VALUES ('放射科', 
                     '放射科是利用各种影像学方法对疾病进行诊断和治疗的医学科室。我院放射科配备先进的CT、MRI等设备，提供高质量的医学影像诊断服务。', 
                     '门诊楼6层', 
                     '0755-88661013', 
                     'CT诊断、MRI诊断、X线诊断、超声诊断、介入放射学')";
    if (mysqli_query($conn, $radiology_sql)) {
        $radiology_id = mysqli_insert_id($conn);
        echo "成功添加放射科\n";
        
        // 添加放射科医生
        for ($i = 0; $i < 5; $i++) {
            $gender = rand(0, 1) ? '男' : '女';
            $surname = $surnames[array_rand($surnames)];
            
            if ($gender == '男') {
                $name = $surname . $male_names[array_rand($male_names)];
            } else {
                $name = $surname . $female_names[array_rand($female_names)];
            }
            
            $position = $positions[array_rand($positions)];
            $phone = '1' . rand(3, 9) . rand(0, 9) . rand(1000000, 9999999);
            
            $education = sprintf(
                $education_templates[array_rand($education_templates)],
                $medical_schools[array_rand($medical_schools)] . '医科大学',
                $hospitals[array_rand($hospitals)]
            );
            
            $years = rand(5, 30);
            $specialty = "放射科影像诊断";
            
            $experience = sprintf(
                $experience_templates[array_rand($experience_templates)],
                $years,
                $specialty
            );
            
            $bio = sprintf(
                $bio_templates[array_rand($bio_templates)],
                $specialty
            );
            
            $add_doctor_sql = "INSERT INTO doctors (name, position, department_id, phone, bio, education, experience, title) 
                              VALUES ('" . mysqli_real_escape_string($conn, $name) . "', 
                              '" . mysqli_real_escape_string($conn, $position) . "', 
                              $radiology_id, 
                              '" . mysqli_real_escape_string($conn, $phone) . "', 
                              '" . mysqli_real_escape_string($conn, $bio) . "', 
                              '" . mysqli_real_escape_string($conn, $education) . "', 
                              '" . mysqli_real_escape_string($conn, $experience) . "',
                              '" . mysqli_real_escape_string($conn, $position) . "')";
            
            if (mysqli_query($conn, $add_doctor_sql)) {
                $doctor_id = mysqli_insert_id($conn);
                echo "放射科医生 {$name} 创建成功\n";
                
                // 生成排班
                generate_schedule($conn, $doctor_id, $name);
            } else {
                echo "创建放射科医生失败: " . mysqli_error($conn) . "\n";
            }
        }
    } else {
        echo "添加放射科失败: " . mysqli_error($conn) . "\n";
    }
}

// 关闭数据库连接
mysqli_close($conn);

echo "科室、医生和排班数据生成完成！\n";
?>